package com.yunyao.dao.model;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;

import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
import java.util.Date;

/**
 * <p>
 * 采购合同预付款表
 * </p>
 *
 * @author xingjishuai
 * @since 2024-07-02
 */
@Getter
@Setter
@TableName("bamu_purchase_contract_pre_payment")
public class BamuPurchaseContractPrePayment {

    /**
     * 主键Id
     */
    private String id;

    /**
     * 合同Id
     */
    @NotBlank(message = "合同ID为空")
    private String contractId;

    /**
     * 合同编号
     */
    @NotBlank(message = "合同编号为空")
    private String contractNo;

    /**
     * 合同名称
     */
    @NotBlank(message = "合同名称为空")
    private String contractName;

    /**
     * 合同类型 s  1=销售合同 p  0 =采购合同
     */
    @NotBlank(message = "合同类型为空")
    private String contractType;

    /**
     * 项目ID
     */
    @NotBlank(message = "项目ID为空")
    private String projectId;

    /**
     * 项目名称
     */
    @NotBlank(message = "项目名称为空")
    private String projectName;

    /**
     * 所属单位ID
     */
    private String projectDeptId;

    /**
     * 所属单位名称
     */
    private String projectDeptName;

    /**
     * 项目所属地址
     */
    private String projectAddress;

    /**
     * 供应商ID
     */
    private String supplierDeptId;

    /**
     * 供应商名称
     */
    private String supplierDeptName;

    /**
     * 供应商品类ID
     */
    private String supplierCategoryId;

    /**
     * 供应商品类名称
     */
    private String supplierCategoryName;

    /**
     * 合同预付款比例
     */
    private BigDecimal contractPrePaymentRate;

    /**
     * 合同预付款天数
     */
    private Integer contractPrePaymentDay;

    /**
     * 合同预付款天数类型
     */
    private Integer contractPrePaymentDayType;

    /**
     * 合同预付款金额
     */
    private BigDecimal contractPrePaymentPrice;

    /**
     * 合同预付款日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date contractPrePaymentDate;

    /**
     * 真实付款金额
     */
    private BigDecimal contractRealPaymentPrice;

    /**
     * 合同数量
     */
    private BigDecimal contractNum;

    /**
     * 合同总额含税（元）
     */
    private BigDecimal contractTotalPrice;

    /**
     * 合同总额实际含税（元）
     */
    private BigDecimal contractTotalRealPrice;

    /**
     * 合同汇款总金额
     */
    private BigDecimal contractBackPrice;

    /**
     * 结算单文件
     */
    private String reconciliationSettlementFile;

    /**
     * 对账结算说明
     */
    private String reconciliationSettlementMark;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date createdAt;

    /**
     * 创建人
     */
    private String createdBy;

    /**
     * 创建部门
     */
    private String createDept;

    /**
     * 修改时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date updatedAt;

    /**
     * 修改人
     */
    private String updatedBy;

    /**
     * 业务状态
     * 1:待提交
     * 2:审核中
     * 3:撤回
     * 4:审核驳回
     * 5:待项目确认
     * 6:项目确认驳回
     * 7:待回款
     * 8:回款中
     * 9:回款完成
     * 10:回款延迟
     */
    @TableField("`status`")
    private Integer status;

    /**
     * 数据删除状态0:未删除,1:删除
     */
    private Integer isDeleted;

    /**
     * 租户ID
     */
    @TableField(value = "tenant_id", fill = FieldFill.INSERT)
    private String tenantId;

    /**
     * 流程审批状态
     */
    private String auditStatus;

    /**
     * 流程实例ID
     */
    private String processInstanceId;

    /**
     * 流程设计模板信息ID
     */
    private String modelSchemeInfoId;

    /**
     * 流程部署ID
     */
    private String deploymentId;

    /**
     * 流程版本
     */
    private String processVersion;

    /**
     * 付款方式json
     */
    private String paymentMethod;

    /**
     * 合同方式0电线电缆及光纤光缆 1 电梯及扶梯
     */
    private String contractMethod;

    /**
     * 采购单位ID
     */
    private String purchaseDeptId;

    /**
     * 采购单位名称
     */
    private String purchaseDeptName;

    /**
     * 核对说明
     */
    private String checkMark;

    /**
     * 核对文件
     */
    private String checkFile;

    /**
     * 开票状态 0 待开票 1已申请 2 已留存
     */
    private String receiptStatus;

    /**
     * 回款金额
     */
    private BigDecimal receivePrice;

    /**
     * 结余金额
     */
    private BigDecimal balanceAmount;

    /**
     * 销售合同ID
     */
    @TableField(exist = false)
    private String saleContractId;
}
